using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Configuration;

namespace VtasMkt.General
{
    internal class RutinasGenericas
    {
        #region Variables y constantes publicas de mantenimiento

        public const string MNT_LISTA_REGISTRO = "Lista registro";
        public const string MNT_NUEVO_REGISTRO = "Nuevo registro";
        public const string MNT_EDITAR_REGISTRO = "Editar registro";
        public const string MNT_ELIMINAR_REGISTRO = "Eliminar registro";
        public const string MNT_CONSULTAR_REGISTRO = "Consultar registro";

        #endregion

        #region "Metodos publicos"

        // Verifica si un DataTable es valido 
        public bool DtValido(DataTable dt)
        {

            //Si no existe 
            if ((dt == null))
            {
                return false;
            }

            else //Si existe
            {

                //Verifica que tenga registros 
                if (dt.Rows.Count > 0)
                {
                    return true;
                }
                else //En caso no tenga
                {
                    return false;
                }

            }

        }
        
        // Valida valores NULL 
        public object ValidarValorNull(object ValorCampo, object ValorPorDefecto)
        {

            //En caso sea NULL le asigna el valor por defecto 
            if (ValorCampo == System.DBNull.Value)
            {
                ValorCampo = ValorPorDefecto;
            }

            //Retorna el valor final del campo 
            return ValorCampo;

        }
        
        // Devuelve la fecha en el formato YYYYMMDD
        public string FechaYYYYMMDD(DateTime fecha)
        {
            String anho, mes, dia;

            anho = fecha.Year.ToString();
            mes = (String)("00" + fecha.Month.ToString());
            mes = mes.Substring(mes.Length - 2, 2);
            dia = (String)("00" + fecha.Day.ToString());
            dia = dia.Substring(dia.Length - 2, 2);

            return anho + mes + dia;
        }

        // Devuelve la hora en el formato HH:mm:ss
        public string HoraHHmmss(DateTime _hora)
        {
            String hora, minuto, segundo;

            hora = (String)("00" + _hora.Hour.ToString());
            hora = hora.Substring(hora.Length - 2, 2);
            minuto = (String)("00" + _hora.Minute.ToString());
            minuto = minuto.Substring(minuto.Length - 2, 2);
            segundo = (String)("00" + _hora.Second.ToString());
            segundo = segundo.Substring(segundo.Length - 2, 2);

            return hora + ":" + minuto + ":" + segundo;
        }

        // Valida que el caracter sea un numero
        public bool SoloNumeros(short KeyAscii)
        {
            if ((KeyAscii >= 48 && KeyAscii <= 57) || (KeyAscii == 46) || (KeyAscii == 8) || (KeyAscii == 27))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        // Valida que todo el texto sea un numero
        public bool TextoSoloNumeros(String texto)
        {
            foreach (char c in texto)
            {
                if (!char.IsNumber(c)) return false;
            }

            // Todo esta ok
            return true;
        }

        // Devuelve el valor entero del caracter
        public int Asc(char valor)
        {
            return (int)valor;
        }

        // Indica el id del item en el combobox que corresponde con el valor
        public int IdComboBox(System.Windows.Forms.ComboBox cboTmp, String valor)
        {
            // Ubica el item y devuelve el id
            for (int i = 0; i < cboTmp.Items.Count; i++)
            {
                if (Convert.ToString(((System.Data.DataRowView)(cboTmp.Items[i])).Row.ItemArray[0]) == valor)
                {
                    return i;
                }
            }
            // En caso no encuentre el item
            return -1;
        }

        // Devuelve la diferencia en dias entre 2 fechas
        public int DiferenciaDias(DateTime fechaIni, DateTime fechaFin)
        {
            return fechaFin.Subtract(fechaIni).Days;
        }

        #endregion 
    }
}
